home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / optivc16 / vsistd.h < prev    next >
C/C++ Source or Header  |  1999-03-06  |  7KB  |  184 lines

  1. /*  VSIstd.h
  2.  
  3.   vector management functions for data type "short int".
  4.  
  5.   Copyright (c) 1996-1999 by Martin Sander
  6.   All Rights Reserved.
  7. */
  8.  
  9. #ifndef __VSISTD_H
  10. #define __VSISTD_H
  11.  
  12. #if !defined( __VECLIB_H )
  13.    #include <VecLib.h>
  14. #endif
  15.  
  16. #ifdef __cplusplus
  17.    extern "C" {
  18. #endif
  19.  
  20. /*************************  Generation ***************************/
  21.  
  22. siVector  __vf  VSI_vector( ui size );
  23. siVector  __vf  VSI_vector0( ui size );
  24.  
  25.  
  26. /***************  Addressing single vector elements ******************/
  27.  
  28. short _VFAR * VSI_Pelement( siVector X, ui n );
  29.       /* returns a pointer to the n'th element of X. For the memory model
  30.          HUGE, the pointer is normalized. */
  31. #define VSI_element( X, n )  (*VSI_Pelement( X, n ))
  32.  
  33. /****************** Initialization  ******************************/
  34.  
  35. void  __vf  VSI_equ0( siVector X, ui size );
  36. void  __vf  VSI_equC( siVector X, ui size, short C );
  37. void  __vf  VSI_equV( siVector Y, siVector X, ui size );
  38. void  __vf  VSIo_ramp( siVector X, ui size, short Start, short Rise );
  39. #ifdef V_trapIntError
  40.     #define VSI_ramp   VSIo_ramp
  41. #else
  42.     void  __vf  VSI_ramp( siVector X, ui size, short Start, short Rise );
  43. #endif
  44. long  __vf  VSI_random( siVector X, ui size, long seed,
  45.                         short MinVal, short MaxVal );  /*  returns new seed */
  46.  
  47.  
  48. /************** Data-type interconversions  ****************************/
  49.  
  50. void  __vf  Vo_SItoUS( usVector Y, siVector X, ui size ); /* signed-unsigned */
  51. void  __vf  Vo_UStoSI( siVector Y, usVector X, ui size );
  52.  
  53. void  __vf  V_BItoSI( siVector Y, biVector X, ui size );  /* up-conversion */
  54. void  __vf  V_SItoI(  iVector  Y, siVector X, ui size );
  55. void  __vf  V_SItoLI( liVector Y, siVector X, ui size );
  56. void  __vf  V_SItoQI( qiVector Y, siVector X, ui size );
  57.  
  58. void  __vf  V_SItoBI(  biVector Y, siVector X, ui size ); /* down-conversion */
  59. void  __vf  Vo_ItoSI(  siVector Y, iVector  X, ui size );
  60. void  __vf  Vo_LItoSI( siVector Y, liVector X, ui size );
  61. void  __vf  Vo_QItoSI( siVector Y, qiVector X, ui size );
  62. #ifdef V_trapIntError
  63.     #define V_SItoUS  Vo_SItoUS
  64.     #define V_UStoSI  Vo_UStoSI
  65.     #define V_ItoSI   Vo_ItoSI
  66.     #define V_LItoSI  Vo_LItoSI
  67.     #define V_QItoSI  Vo_QItoSI
  68. #else
  69.     void  __vf   V_SItoUS( usVector Y, siVector X, ui size );
  70.     void  __vf   V_UStoSI( siVector Y, usVector X, ui size );
  71.     void  __vf   V_ItoSI(  siVector Y, iVector  X, ui size );
  72.     void  __vf   V_LItoSI( siVector Y, liVector X, ui size );
  73.     void  __vf   V_QItoSI( siVector Y, qiVector X, ui size );
  74. #endif
  75.  
  76. void  __vf   V_SItoF(  fVector Y, siVector X, ui size );
  77. void  __vf   V_SItoD(  dVector Y, siVector X, ui size );
  78. #ifdef __BORLANDC__
  79.     void  __vf   V_SItoE(  eVector Y, siVector X, ui size );
  80. #else  /* no 80-bit IEEE reals with Visual C++ */
  81.     #define V_SItoE V_SItoD
  82. #endif
  83.  
  84. /************** Index-oriented manipulations ***************************/
  85.  
  86. void  __vf  VSI_rev( siVector Y, siVector X, ui size );
  87. #ifdef V_HUGE
  88.     void  __vf  VSI_rotate( siVector Y, siVector X, ui size, long pos );
  89. #else
  90.     void  __vf  VSI_rotate( siVector Y, siVector X, ui size, int pos );
  91. #endif
  92.  
  93. void  __vf  VSI_delete( siVector X, ui size, ui pos );
  94. void  __vf  VSI_insert( siVector X, ui size, ui pos, short C );
  95.  
  96. void  __vf  VSI_sort( siVector Y, siVector X, ui size, int dir );
  97. void  __vf  VSI_sortind( uiVector Ind, siVector X, ui size, int dir );
  98.  
  99. void  __vf  VSI_subvector( siVector Y, ui sizey, siVector X, int samp );
  100. void  __vf  VSI_subvector_equC( siVector Y, ui subsz, unsigned samp, short C );
  101. void  __vf  VSI_subvector_equV( siVector Y, ui subsz, unsigned samp,
  102.                                 siVector X );
  103.  
  104. void  __vf  VSI_indpick( siVector Y, uiVector Ind, ui sizey, siVector X );
  105. void  __vf  VSI_indput(  siVector Y, siVector X, uiVector Ind, ui sizex );
  106.  
  107. ui    __vf  VSI_searchC( siVector XTab, ui size, short C, int mode );
  108. void  __vf  VSI_searchV( uiVector Ind, siVector X, ui sizex,
  109.                          siVector Tab, ui sizetab, int mode );
  110.  
  111. /********************   One-dimensional Vector Operations  ********/
  112.  
  113. short __vf  VSIo_sum( siVector X, ui size );
  114. void  __vf  VSIo_runsum( siVector Y, siVector X, ui size );
  115. #ifdef V_trapIntError
  116.     #define VSI_sum     VSIo_sum
  117.     #define VSI_runsum  VSIo_runsum
  118. #else
  119.     short __vf  VSI_sum( siVector X, ui size );
  120.     void  __vf  VSI_runsum( siVector Y, siVector X, ui size );
  121. #endif
  122. short  __vf  VSI_max( siVector X, ui size );
  123. short  __vf  VSI_min( siVector X, ui size );
  124. short  __vf  VSI_maxind( ui _VFAR *Ind, siVector X, ui size );
  125. short  __vf  VSI_minind( ui _VFAR *Ind, siVector X, ui size );
  126. void   __vf  VSI_runmax( siVector Y, siVector X, ui size );
  127. void   __vf  VSI_runmin( siVector Y, siVector X, ui size );
  128. double __vf  VSI_fsum( siVector X, ui size );
  129. double __vf  VSI_mean( siVector X, ui size );
  130.  
  131. int    __vf  VSI_iselementC( siVector Tab, ui size, short C );
  132. ui     __vf  VSI_iselementV( siVector Y, siVector X, ui sizex,
  133.                              siVector Tab, ui sizetab );
  134.  
  135.  
  136. /************************ Input / Output ******************************/
  137.  
  138. void  __vf   V_ifprint(  FILE _VFAR *stream, void _VFAR *X, ui size,
  139.                   unsigned nperline, unsigned linewidth, unsigned vers );
  140. #define VSI_fprint( st, x, sz, npl, lw ) \
  141.              V_ifprint(  st, (void _VFAR *)(x), sz, npl, lw, 2 )
  142.  
  143. #if !defined _Windows || defined __FLAT__ || defined _WIN32
  144.     void __vf  V_icprint(  void _VFAR *X, ui size, unsigned nperline, unsigned vers );
  145.     #define VSI_cprint( x, sz, npl ) V_icprint( (void _VFAR *) (x), sz, npl, 2 )
  146. #endif
  147. #define VSI_print(  x, sz, npl ) \
  148.              V_ifprint(  stdout, (void _VFAR *)(x), sz, npl, 80, 2 )
  149.  
  150. void  __vf   V_setRadix( int radix );
  151.            /* radix to be assumed by all whole-number read functions V??_read */
  152. void  __vf   VSI_read( siVector X, ui size, FILE _VFAR *stream );
  153. void  __vf   VSI_write( FILE _VFAR *stream, siVector X, ui size );
  154. void  __vf   VSI_nread( unsigned n, ui size, FILE _VFAR *stream, ... );
  155. void  __vf   VSI_nwrite( FILE _VFAR *stream, unsigned n, ui size, ... );
  156. void  __vf   VSI_setWriteFormat( char _VFAR *FormatString );
  157.                                             /* for VSI_write and VSI_nwrite */
  158. void  __vf   VSI_setWriteSeparate( char _VFAR *SepString ); /* for VSI_write */
  159. void  __vf   VSI_setNWriteSeparate( char _VFAR *SepString ); /* for VSI_nwrite */
  160. #ifdef V_HUGE
  161.     void  __vf   VSI_store(  FILE _VFAR *stream, siVector X, ui size );
  162.     void  __vf   VSI_recall( siVector X, ui size, FILE _VFAR *stream );
  163. #else
  164.     #ifdef __cplusplus
  165.          void  inline VSI_store( FILE _VFAR *stream, siVector X, ui size )
  166.          {    fwrite( X, sizeof(short), size, stream ); 
  167.          }
  168.          void  inline VSI_recall( siVector X, ui size, FILE _VFAR *stream )
  169.          {    fread(  X, sizeof(short), size, stream );
  170.          }
  171.     #else
  172.         #define VSI_store( str, X, sz )  \
  173.                      fwrite( X, sizeof(short), sz, str )
  174.         #define VSI_recall( X, sz, str ) \
  175.                      fread(  X, sizeof(short), sz, str )
  176.     #endif
  177. #endif      /* VSI_store, VSI_recall in binary format */
  178.  
  179. #ifdef __cplusplus
  180. }
  181. #endif
  182.  
  183. #endif   /*  __VSISTD_H    */
  184.